home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / osrc.arc / DOMAIN.H < prev    next >
Encoding:
C/C++ Source or Header  |  1989-03-30  |  4.3 KB  |  147 lines

  1. #ifndef    NULLDOM
  2.  
  3. #include "global.h"
  4.  
  5. #define    NRLIST    17
  6.  
  7. #define    TYPE_A        1    /* Host address */
  8. #define    TYPE_NS        2    /* Name server */
  9. #define    TYPE_MD        3    /* Mail destination (obsolete) */
  10. #define    TYPE_MF        4    /* Mail forwarder (obsolete) */
  11. #define    TYPE_CNAME    5    /* Canonical name */
  12. #define    TYPE_SOA    6    /* Start of Authority */
  13. #define    TYPE_MB        7    /* Mailbox name (experimental) */
  14. #define    TYPE_MG        8    /* Mail group member (experimental) */
  15. #define    TYPE_MR        9    /* Mail rename name (experimental) */
  16. #define    TYPE_NULL    10    /* Null (experimental) */
  17. #define    TYPE_WKS    11    /* Well-known sockets */
  18. #define    TYPE_PTR    12    /* Pointer record */
  19. #define    TYPE_HINFO    13    /* Host information */
  20. #define    TYPE_MINFO    14    /* Mailbox info */
  21. #define    TYPE_MX        15    /* Mail exchanger */
  22. #define    TYPE_TXT    16    /* Text strings */
  23.  
  24. #define    CLASS_IN    1    /* The ARPA Internet */
  25.  
  26. struct dserver {
  27.     struct dserver *prev;    /* Linked list pointers */
  28.     struct dserver *next;
  29.  
  30.     int32 address;        /* IP address of server */
  31.     int32 timeout;        /* Current timeout */
  32.     int32 srtt;        /* Smoothed round trip time */
  33.     int32 mdev;        /* Mean deviation */
  34. };
  35. #define    NULLDOM    (struct dserver *)0
  36. extern struct dserver *Dlist;
  37. extern int Dsocket;        /* Socket to use for domain queries */
  38.  
  39. /* Header for all domain messages */
  40. struct dhdr {
  41.     int16 id;        /* Identification */
  42.     char qr;        /* Query/Response */
  43. #define    QUERY        0
  44. #define    RESPONSE    1
  45.     char opcode;
  46. #define    IQUERY        1
  47.     char aa;        /* Authoratative answer */
  48.     char tc;        /* Truncation */
  49.     char rd;        /* Recursion desired */
  50.     char ra;        /* Recursion available */
  51.     char rcode;        /* Response code */
  52. #define    NO_ERROR    0
  53. #define    FORMAT_ERROR    1
  54. #define    SERVER_FAIL    2
  55. #define    NAME_ERROR    3
  56. #define    NOT_IMPL    4
  57. #define    REFUSED        5
  58.     int16 qdcount;        /* Question count */
  59.     int16 ancount;        /* Answer count */
  60.     int16 nscount;        /* Authority (name server) count */
  61.     int16 arcount;        /* Additional record count */
  62.     struct quest **qlist;    /* List of questions */
  63.     struct rr **ans;    /* List of answers */
  64.     struct rr **ns;        /* List of name servers */
  65.     struct rr **add;    /* List of additional records */
  66. };
  67. struct quest {
  68.     char *qname;        /* Domain name being sought */
  69.     int16 qtype;        /* Type (A, MX, etc) */
  70.     int16 qclass;        /* Class (IN, etc) */
  71. };
  72.  
  73. struct mx {
  74.     int16 pref;
  75.     char *exch;
  76. };
  77.  
  78. struct hinfo {
  79.     char *cpu;
  80.     char *os;
  81. };
  82.  
  83. struct soa {
  84.     char *mname;
  85.     char *rname;
  86.     int32 serial;
  87.     int32 refresh;
  88.     int32 retry;
  89.     int32 expire;
  90.     int32 minimum;
  91. };
  92.  
  93. struct rr {
  94.     char *name;        /* Domain name, ascii form */
  95.     int16 type;        /* A, MX, etc */
  96.     int16 class;        /* IN, etc */
  97.     int32 ttl;        /* Time-to-live */
  98.     int16 rdlength;        /* Length of data field */
  99.     union {
  100.         int32 addr;        /* Used for type == A */
  101.         struct soa soa;        /* Used for type == SOA */
  102.         struct mx mx;        /* Used for type == MX */
  103.         struct hinfo hinfo;    /* Used for type == HINFO */
  104.         char *name;        /* for domain names */
  105.         char *data;        /* for anything else */
  106.     } rdata;
  107. };
  108. #define    NULLRR    (struct rr *)0
  109. extern struct rr *Rrlist[NRLIST];
  110.  
  111. extern char *Dfile;
  112.  
  113. int doadds(),dodropds(),dosuffix(),dodtrace();
  114.  
  115. #if    defined(__STDC__) || defined(__TURBOC__)
  116. static struct rr *dfind(FILE *dbase,char *name,int type);
  117. static struct rr *getrr(FILE *fp);
  118. int32 dresolve(char *name);
  119. int32 resolve(char *name);
  120. static int res_mkquery(int16 op,char *dname,int16 class,int16 type,
  121.     char *data,int16 datalen,int16 newrr,char *buffer,int16 buflen);
  122. static int dn_expand(char *msg,char *eom,char *compressed,char *full,int fullen);
  123. void drx(void);
  124. static void proc_answer(struct dserver *dp,struct mbuf *bp);
  125. static int ntohdomain(struct dhdr *dhdr,struct mbuf **bpp);
  126. static char *getq(struct quest *qp,char *msg,char *cp);
  127. static char *ntohrr(struct rr *rrp,char *msg,char *cp);
  128. static void putrr(FILE *fp,struct rr *rrp);
  129. static void addit(FILE *fp,struct rr *rrp1);
  130. static struct dserver *dslookup(int32 server);
  131. static void free_dhdr(struct dhdr *dp);
  132. static void free_qu(struct quest *qp);
  133. static void free_rr(struct rr *rrp);
  134. static int rrcmp(struct rr *rr1,struct rr *rr2);
  135.  
  136. #else
  137. void drx();
  138. int32 dresolve(),resolve();
  139. static struct rr *dfind(),*getrr();
  140. static int res_mkquery(),dn_expand(),ntohdomain(),rrcmp();
  141. static char *getq(),*ntohrr();
  142. static void putrr(),addit(),free_dhdr(),free_qu(),free_rr(),proc_answer();
  143. static struct dserver *dslookup();
  144.  
  145. #endif
  146. #endif    /* NULLDOM */
  147.